function setModelClassification()
%SETMODELCLASSIFICATION 设置模型分类标签
%   此函数配置项目标签以供模型测试仪表板（Model Testing Dashboard）使用。
%   设置软件组件和单元的分类器，支持DO-178C标准的分层验证需求。
%
%语法:
%   setModelClassification()
%
%输入参数:
%   无
%
%输出参数:
%   无
%
%说明:
%   - 首先检查Simulink Check许可证是否可用
%   - 创建软件组件分类器（SW_COMPONENT_CLASSIFIER）
%   - 创建软件单元分类器（SW_UNIT_CLASSIFIER）
%   - 使用应用程序生命周期管理(ALM)服务设置分类器
%   - 分类器信息以JSON格式编码并存储
%
%分类器类型:
%   1. SW_COMPONENT_CLASSIFIER:
%      - 名称: "SW_COMPONENT_CLASSIFIER"
%      - 类别: "Design Model"
%      - 标签: "Component"
%      - 用于标识软件组件级别的模型
%
%   2. SW_UNIT_CLASSIFIER:
%      - 名称: "SW_UNIT_CLASSIFIER"
%      - 类别: "Design Model"
%      - 标签: "Unit"
%      - 用于标识软件单元级别的模型
%
%DO-178C分层验证:
%   在DO-178C标准中，软件开发采用分层方法：
%   - 软件组件级别：系统级功能和接口
%   - 软件单元级别：具体实现和算法
%   - 不同级别需要不同的验证策略和测试方法
%
%模型测试仪表板集成:
%   设置的分类器将在模型测试仪表板中用于：
%   - 自动识别模型类型
%   - 应用相应的测试策略
%   - 生成分层的测试报告
%   - 支持追踪性分析
%
%使用场景:
%   - 项目初始化设置
%   - 标准化模型分类系统
%   - 支持自动化测试流程
%   - 满足DO-178C追踪性要求
%   - 团队协作和工具集成
%
%示例:
%   % 基本分类器设置
%   setModelClassification();
%   fprintf('模型分类器已设置完成\n');
%
%   % 项目初始化中的使用
%   function initializeProject()
%       fprintf('初始化DO-178C项目...\n');
%       
%       % 设置默认配置
%       setDefaultMdlAdvCfg();
%       
%       % 设置模型分类
%       setModelClassification();
%       
%       % 初始化需求管理
%       rmiSetup();
%       
%       fprintf('项目初始化完成\n');
%   end
%
%   % 验证分类器设置
%   function verifyClassificationSetup()
%       try
%           setModelClassification();
%           fprintf('✓ 模型分类器设置成功\n');
%       catch ME
%           fprintf('✗ 模型分类器设置失败: %s\n', ME.message);
%       end
%   end
%
%   % 团队环境标准化
%   function standardizeTeamEnvironment()
%       fprintf('标准化团队开发环境...\n');
%       
%       % 重置环境
%       resetWorkspace();
%       clearTestManager();
%       clearCoverageData();
%       
%       % 设置标准配置
%       setDefaultMdlAdvCfg();
%       setModelClassification();
%       
%       fprintf('团队环境标准化完成\n');
%   end
%
%ALM服务集成:
%   函数使用应用程序生命周期管理(ALM)服务来存储分类器信息：
%   - 获取项目根目录的ALM服务实例
%   - 调用setSoftwareClassifier服务方法
%   - 以JSON格式传递分类器结构体
%
%JSON结构体格式:
%   {
%     "name": "分类器名称",
%     "category": "设计模型",
%     "label": "标签名称"
%   }
%
%许可证要求:
%   此函数需要Simulink Check许可证。如果许可证不可用，
%   函数会静默退出，不会设置分类器。
%
%错误处理:
%   如果ALM服务不可用或设置失败，可能会抛出异常。
%   建议在项目初始化脚本中使用try-catch包装调用。
%
%项目结构依赖:
%   函数依赖ProjectPathManager.getDirPath('root')获取项目根目录。
%   确保项目结构配置正确。
%
%依赖项:
%   dig.isProductInstalled - 检查产品安装状态
%   alm.ProjectService - 应用程序生命周期管理服务
%   ProjectPathManager.getDirPath - 获取项目目录路径
%   jsonencode - JSON编码函数
%
%参见:
%   setDefaultMdlAdvCfg, openModelTestingDashboard, alm.ProjectService
%

%版本: 1.0
%日期: 2021-2024
%


if dig.isProductInstalled('Simulink Check')
    % Set the classification for component interface.
    SwClassifier = struct("name", "SW_COMPONENT_CLASSIFIER", "category", "Design Model", "label", "Component");
    prjService = alm.ProjectService.get(ProjectPathManager.getDirPath('root'));
    prjService.serviceCall("setSoftwareClassifier", jsonencode(SwClassifier));
    % Set the classification for unit interface.
    SwClassifier = struct("name", "SW_UNIT_CLASSIFIER", "category", "Design Model", "label", "Unit");
    prjService = alm.ProjectService.get(ProjectPathManager.getDirPath('root'));
    prjService.serviceCall("setSoftwareClassifier", jsonencode(SwClassifier));
end

end